import xlrd
from xlutils.copy import copy
from app.web.data.data_config import Config
# from config.config import datapath
from app.web.conf.config import  *

class OperateExcel():
    def __init__(self, file_name=None,sheet_id=None):#初始化
        if file_name:
            self.file_name=file_name
            self.sheet_id=sheet_id
        else:
            self.file_name=datapath+"\\Interface_data1.xls"#excel地址
            # self.file_name = 'D:/My/Interface-修改/data/Interface_data1.xls'  # excel地址
            self.sheet_id=0
        self.config = Config()
        self.data=self.get_data()

    # 获取某一个单元格的内容
    def get_cell_value(self, row, col):
        return self.data.cell_value(row,col)#self.deta=self.get_data

    # 获取sheets的内容
    def get_data(self):
        data = xlrd.open_workbook(self.file_name)
        tables = data.sheets()[self.sheet_id]
        return tables
    # 根据对应的caseid 找到对应行的内容
    def get_row_num(self, case_id):
        num = 0
        clols_data = self.get_cols_data()
        # print('cols_data=%s' % clols_data)
        for col_data in clols_data:
            # print('col_data=%s'%col_data )
            if case_id in col_data:
                return num
            num = num + 1
            # print("num=%s"%num)
        return num

    # 根据对应的caseid 找到对应行号
    def get_row_num(self,case_id):
        num = 0
        clols_data = self.get_cols_data()
        # print('cols_data=%s' % clols_data)
        for col_data in clols_data:
            # print('col_data=%s'%col_data )
            if case_id in col_data:
                return num
            num = num + 1
            # print("num=%s"%num)
        return num

# 获取某一列的内容
    def get_cols_data(self, col_id=None):
        if col_id != None:
            cols = self.data.col_values(col_id)
        else:
            cols = self.data.col_values(0)
        return cols

#写入数据
    def write_data(self,row,col,value):#在excel的row行col列写入value值
        read_data=xlrd.open_workbook(self.file_name)
        write_data=copy(read_data)#复制excel已有内容
        sheet_data=write_data.get_sheet(0)#
        sheet_data.write(row,col,value)#写入值
        write_data.save(self.file_name)#保存

    # 写入返回结果
    def write_result(self,row,value):  # 在excel的row行col列写入value值
        col = int(self.config.get_conf()['result'])  # excel表中‘result'的列号
        self.write_data(row,col,value)

    # 写入测试结果（pass or false）
    def write_response(self, row, value):  # 在excel的row行col列写入value值
        col = int(self.config.get_conf()['response'])  # excel表中‘result'的列号
        self.write_data(row, col, value)

            #根据对应的case_id找到对应的内容
    # def get_rows_data(self,case_id):#case_id相当于行号
    #     row_num=self.get_row_num(case_id)

    def excel_table_byindex(self,file,colnameindex):#根据索引获取excel表格中的数据，file:excel文件路径，colnameindex:表头列各所在行的
        data=xlrd.open_workbook(file)
        table=data.sheets()[0]
        nrows=table.nrows#行数
        colnames=table.row_values(colnameindex)#某一行数据
        list=[]
        for colnameindex in range(1,nrows):
            row=table.row_values(colnameindex)
            if row:
                app={}
                for i in range(len(colnames)):
                    app[colnames[i]]=str(row[i])
                list.append(app)
        return list
if __name__=="__main__":
    Oper=OperateExcel()
    Oper.write_data(row=1,col=16,value= 'test')